package com.yyge.util.sms;

import cn.hutool.core.util.StrUtil;
import com.yyge.common.enums.AckCode;
import com.yyge.common.exception.ServiceException;
import lombok.Getter;
import lombok.Setter;

import java.util.*;

/**
 * @Author gityyge
 * @Description 发送短信-策略模式
 * @Date 2023/7/11 17:24
 * @Version 1.0
 */
public abstract class SmsRequestReq {
    /**
     * 短信模版
     */
    @Getter
    @Setter
    private String templateId;

    /**
     * 短信模版名称
     */
    @Getter
    @Setter
    private String templateName;


    /**
     * 发送短信电话号码
     */
    protected Set<String> phoneNumber=new HashSet<>();

    /**
     * 短信参数
     */
    protected Map<String,String> paramSet=new HashMap();

    /**
     * 短信模板能数个数
     * @return
     */
    public abstract int paransLen();

    public String[] getPhone(){
        if(phoneNumber.size() == 0){
            throw new ServiceException(AckCode.SMS_MOBILE_NOT_NULL);
        }
        return phoneNumber.toArray(new String[0]);
    }

   public String[] params(){
        if(this.paransLen()>0){
            //参数个数与设定模板叁数个数不同的时候就要报错
            if(this.paramSet.size()!=this.paransLen()){
                AckCode a = AckCode.SMS_PARAMS_ERROR;
                a.setMsg(StrUtil.format(a.getMsg(),this.templateId));
                throw new ServiceException(a);
            }
            return paramSet.values().toArray(new String[0]);
        }
        return null;
   }
}
